package com.vvlive.caibao.smartcity.utils;

import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 解析json数据的工具类(还是用Gson好一点...)
 * <ul>
 * <li>1.<b>parseJsonObj</b>:<code>{"name":"xiaofang","age":"18"}</code></li>
 * <li>2.<b>parseJsonArray</b><code>[{"name":"xiaofang","age":18},{"name":"dafang","age":20},{"name":"laofang","age":30}]</code></li>
 * </ul>
 */
public class JsonUtil {

	/**
	 * 解析JSONObject
	 * 
	 * @param json	json数据
	 * @param names	要取出的字段名
	 * @return
	 * @throws JSONException 
	 */
	public static Object[] parseJsonObj(String json, String[] names) throws JSONException{
		Object[] array = new String[names.length];
		JSONTokener jsonTokener = new JSONTokener(json);
		JSONObject jsonObject = (JSONObject) jsonTokener.nextValue();
		for(int i=0; i< names.length; i++){
			array[i] = jsonObject.get(names[i]);
		}
		return array;
	}
	
	/**
	 * 解析Json数据到一个Map当中
	 * @param json
	 * @param names
	 * @return
	 * @throws JSONException
	 */
	public static Map<String, Object> parseJsonObjToMap(String json, String[] names) throws JSONException{
		Map<String, Object> map = new HashMap<String, Object>();
		Object[] obj = parseJsonObj(json, names);
		for(int i = 0; i < names.length; i++){
			map.put(names[i], obj[i].toString());
		}
		return map;
	}
	
	/**
	 * 解析JsonArray<br>
	 * <code>[{"name":"xiaoming","age":16},{"name":"daming","age":18},{"name":"zhongming","age":17}]</code>
	 * 
	 * @param json	json数据
	 * @param names	要取出的字段名，同parseJsonObj
	 * @return
	 * @throws JSONException
	 */
	public static List<Object[]> parseJsonArray(String json, String[] names) throws JSONException{
		
		List<Object[]> list = new ArrayList<Object[]>(); 
		// 先转成JsonObject，然后调用parseJsonObj方法进行转换
		// 最后添加到List里面
		String[] jsonArray = toJsonObj(json);
		for(int i = 0; i< jsonArray.length ; i++){
			list.add(parseJsonObj(jsonArray[i], names));
		}
		return list;
	}
	
	public static List<Map<String, Object>> parseJsonArrayToMap(String json, String[] names) throws JSONException{
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		String[] jsonArray = toJsonObj(json);
		Map<String, Object> map = null;
		for(int i = 0; i< jsonArray.length ; i++){
			Object[] data = parseJsonObj(jsonArray[i], names);
			map = new HashMap<String, Object>();
			for(int j = 0; j < names.length ; j++){
				map.put(names[j], data[j].toString());
			}
			list.add(map);
			map = null;
		}
		return list;
	}
	
	/**
	 * JsonArray转成JsonObject
	 * 
	 * @param jarr
	 * @return
	 */
	private static String[] toJsonObj(String jarr){
		// 首先取出两边的中括号, 然后分割成数组
		String[] arr = jarr.substring(1, jarr.length()-1).split("\\}\\,");
		// 最后补足缺陷的部分
		for(int i=0; i<arr.length; i++){
			if(i < arr.length-1){
				arr[i] += "}";
			}
		}
		return arr;
	}

}
